#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=3e5+10;
int n,m;
struct node
{
  int x,y,id;  
};
node cat[N],pe[N];
int ans[N];
void read()
{
    for(int i=1;i<=n;i++) cin>>cat[i].x;
    for(int i=1;i<=n;i++) cin>>cat[i].y;
    for(int i=1;i<=m;i++) cin>>pe[i].x;
    for(int i=1;i<=m;i++) cin>>pe[i].y;
    for(int i=1;i<=n;i++) cat[i].id=i;
    for(int i=1;i<=m;i++) pe[i].id=i;
}
bool cmpx(node a,node b)
{
    if(a.x!=b.x) return a.x<b.x;
    if(a.y!=b.y) return a.y<b.y;
    return a.id<b.id;
}
bool cmpy(node a,node b)
{
    if(a.y!=b.y) return a.y<b.y;
    if(a.y!=b.y) return a.x>b.x;
    return a.id<b.id;
    
}
int main()
{
    cin>>n>>m;
    read();
    sort(pe+1,pe+m+1,cmpy);
    sort(cat+1,cat+n+1,cmpx);
    //for(int i=2;i<=m;i++)
    //{
        //pe[i].x=max(pe[i].x,pe[i-1].x);
    //}
    int j=1;
    //memset(ans,-1,sizeof(ans));
    int mx=0;
    for(int i=1;i<=n;i++)
    {
        while(j<=m && pe[j].y<=cat[i].x )
        {
            mx=max(mx,pe[j].x);
            j++;
        }
        if(mx>=cat[i].y)
        {
            ans[cat[i].id]=mx;
        }
        else ans[cat[i].id]=-1;
    }
    for(int i=1;i<=n;i++)
    {
        cout<<ans[i]<<' ';
    }
    return 0;
}
